package jermedit.gobjekte;

import java.awt.BasicStroke;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Stroke;
import javax.swing.SwingUtilities;


public class EnumType extends PolygonObject {

    public EnumType(int x, int y, int id) {
//        super(vonX, vonY, "Enum", id);
        this.x = x;
        this.y = y;
        this.name="";
        this.id = id;
        breite = 60;
        laenge = 30;
//Editpoints
        obenmitte = new EditPoint (x,y-laenge/2);
        mittelinks = new EditPoint(x-breite/2,y);
        mitterechts = new EditPoint(x+breite/2,y);
        untenmitte = new EditPoint(x,y+laenge/2);

        boundingBox = (new Rectangle (x-breite/2,y-laenge/2, breite, laenge)).getBounds();
    }

    @Override
    public void drawSub(Graphics2D g2) {

        // In allen Objekten, die wir zeichnen benutzen wir Stroke stroke
        //(gestrichelte Linie)
        Stroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0,
                new float[]{3, 1}, 0);

        g2.setStroke(
                new BasicStroke(1.0f, // Width 
                BasicStroke.CAP_SQUARE, // End cap 
                BasicStroke.JOIN_MITER, // Join style 
                10.0f, // Miter limit 
                new float[]{5.0f, 3.0f}, // Dash pattern //{length of Strokes, length of empty spaces}   
                0.0f));
        g2.setStroke(stroke);
        g2.drawLine(x + breite * 2 / 5, y - laenge / 2, x + breite * 2 / 5, y + laenge / 2);

        g2.drawRect(x - breite / 2, y - laenge / 2, breite, laenge);    // Zeichnet ein Rechteck mit gestrichelter Linie
        g2.setStroke(new BasicStroke());


        FontMetrics fm = g2.getFontMetrics();
        int strWidth = SwingUtilities.computeStringWidth(fm, name);
        g2.drawString(name, x - strWidth / 2, y + fm.getAscent() / 2);       //g2.drawLine(x+breite*2/5, y-laenge/2, x+breite*2/5, y+laenge/2);
        

    }

    @Override
    public boolean isInArea(int x, int y) {
        return (x > this.x - breite / 2 && x < this.x + breite / 2 && y > this.y - laenge / 2 && y < this.y + laenge / 2);
    }

    public void move(int x, int y){
        super.move(x,y);
        boundingBox.move(x-breite,y-laenge);
        //Verschiebe die Eckpunkte mithilfe des Enumtyps
        obenmitte.move(x,y-laenge/2);
        mittelinks.move(x-breite/2,y);
        mitterechts.move(x+breite/2,y);
        untenmitte.move(x,y+laenge/2);
    
    }
        @Override
    public Point linkerObenEckpunkt(){
        Point liOben = new Point(x-getBreite()/2,y-getLaenge()/2);
        return liOben;
    }
        
    @Override
    public Point rechterObenEckpunkt(){
        Point reOben = new Point(x+getBreite()/2,y-getLaenge()/2);
        return reOben;
    }
    
    @Override
    public Point linkerUntenEckpunkt(){
        Point liUnten = new Point(x-getBreite()/2,y+getLaenge()/2);
        return liUnten;
    }
    
    @Override
    public Point rechterUntenEckpunkt(){
        Point reUnten = new Point(x+getBreite()/2,y+getLaenge()/2);
        return reUnten;
    }
    
    @Override
    public int getBreite() {
        return breite;
    }

    @Override
    public void setBreite(int breite) {
        this.breite = breite;
    }

    @Override
    public int getLaenge() {
        return laenge;
    }

    @Override
    public void setLaenge(int länge) {
        this.laenge = länge;
    }
}
